#! /bin/sh
# PCP QA Test No. 519
# exercise new action args (no limit of 2) for pmie ... caused
# pmie to dump core initially
#
# Copyright (c) 1995-2002 Silicon Graphics, Inc.  All Rights Reserved.
#
#
# Solaris Note (OpenIndiana specifically)
#
# Need to edit /etc/syslog.conf and add these lines
# # for PCP QA
# daemon.info                     /var/log/syslog
#
# then kill -HUP <pid-for-syslogd>
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check

rm -f $seq.out
case $PCP_PLATFORM
in
    linux)
	ln $seq.$PCP_PLATFORM $seq.out || exit 1
	SYSLOG_OPT='"-p daemon.info"'
	;;
    darwin)
	ln $seq.linux $seq.out || exit 1
	SYSLOG_OPT=''
	;;
    solaris)
	ln $seq.linux $seq.out || exit 1
	SYSLOG_OPT='"-p daemon.info"'
	;;
    *)
	_notrun "Need qualified output for $PCP_PLATFORM"
	;;
esac

_filter()
{
    # other syslog timestamp variants ...
    # 2014-09-15T10:44:40.269104+10:00
    sed \
	-e 's/[A-Z][a-z][a-z] [A-Z][a-z][a-z] *[0-9][0-9]* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/TIMESTAMP/' \
	-e 's/[A-Z][a-z][a-z] *[0-9][0-9]* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/TIMESTAMP/' \
	-e 's/20[0-9][0-9]-[01][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9]\.[0-9]*/TIMESTAMP/' \
	-e 's/STAMP[-+][0-1][0-9]:[0-5][0-9]/STAMP/' \
	-e "s/`hostname`/HOST/" \
	-e "s/`hostname | sed -e 's/\..*//'`/HOST/" \
	-e 's/[0-9][A-Z]:HOST/HOST/' \
	-e 's/\(pmie[([]\)[0-9][0-9]*/\1PID/' \
	-e 's/ \[ID [0-9][0-9]* daemon.info]//'
}

status=0	# success is the default!
trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15

PMCD_CONNECT_TIMEOUT=60
PMCD_REQUEST_TIMEOUT=60
export PMCD_CONNECT_TIMEOUT PMCD_REQUEST_TIMEOUT

eval `./getpmcdhosts -n 2 -L | sed -e 's/ / other2=/' -e 's/^/other1=/'`
if [ -z "$other1" ]
then
    _notrun "Cannot find first remote host running pmcd"
fi
if [ -z "$other2" ]
then
    _notrun "Cannot find second remote host running pmcd"
    exit
fi
echo "other1=$other1" >>$here/$seq.full
echo "other2=$other2" >>$here/$seq.full

# real QA test starts here
$sudo rm -f core* $seq.core*

cat <<End-of-File | pmie -T 10sec >$tmp.out 2>$tmp.err
// use hosts not in QA circus
//

hosts = ":'$other1' :'$other2'";

some_host (
  some_inst (
    ( 100 * filesys.used \$hosts / filesys.capacity \$hosts ) > 0 ) )
-> shell 15 "src/show-args -c SYSMON -t PERF_INFO_SYSTEM -m 'file system over half-full" "\n%h:[%i] %v% " "'"
 & syslog 15 $SYSLOG_OPT "PCP QA $seq - please ignore - ..." " %h:[%i] %v% ";

End-of-File

# hostnames $other1 and $other2 may contain domain name components,
# but pmie may just report the hostname
#
o1=`echo $other1 | sed -e 's/\..*//'`
o2=`echo $other2 | sed -e 's/\..*//'`
echo "pmie output ..."
sed <$tmp.out \
    -e "/^$other1:/d" \
    -e "/^$o1:/d" \
    -e "/^$other2:/d" \
    -e "/^$o2:/d" \
#
egrep "^($other1|$o1):" <$tmp.out >/dev/null && echo "... at least one line for other1 host"
egrep "^($other2|$o2)*:" <$tmp.out >/dev/null && echo "... at least one line for other2 host"

echo
echo "pmie stderr ..."
_filter <$tmp.err

# may be using journalctl, and so no syslog in the file system
#
if `which journalctl >/dev/null 2>&1`
then
    echo "Using journalctl ..." >>$seq.full
    have_journalctl=true
else
    have_journalctl=false
    SYSLOG=''
    for f in /var/adm/SYSLOG /var/log/daemon.log /var/log/messages /var/log/syslog /var/log/system.log
    do
	if [ -f $f ]
	then
	    SYSLOG=$f
	    break
	fi
    done
    if [ -z "$SYSLOG" ]
    then
	echo "Arrgh! Cannot find your syslog file"
	exit 1
    fi
fi

echo
echo "SYSLOG ..."

if $have_journalctl
then
    # be careful ... --boot not supported in all versions, -l not
    # supported in all versions
    $sudo journalctl -b --full | tail -200 >$tmp.syslog
else
    $sudo tail -200 $SYSLOG >$tmp.syslog
fi

sed <$tmp.syslog -n '/PCP QA '"$seq"' - please ignore/s/\.\.\..*/.../p' \
| _filter \
| sort -u

echo >>$seq.full
if $have_journalctl
then
    echo "=== tail journalctl -b --full ===" >>$seq.full
else
    echo "=== tail SYSLOG ($SYSLOG) ===" >>$seq.full
fi
echo "`wc -l <$tmp.syslog | sed -e 's/ //g'` lines ... expect 200" >>$seq.full
cat $tmp.syslog >>$seq.full

_check_core

exit
